#include "stdafx.h"
//-------------------------------------------------------------------------------------------------
//ResourceList.cpp  - Links ResourceID in ArchProcGUI() to classes in ImageProcLib               
//-------------------------------------------------------------------------------------------------
//FreeBSD License
//Copyright 2011 Will Stott All rights reserved.
//
//Redistribution and use in source and binary forms, with or without modification, are
//permitted provided that the following conditions are met:
//
//   1. Redistributions of source code must retain the above copyright notice, this list of
//      conditions and the following disclaimer.
//
//   2. Redistributions in binary form must reproduce the above copyright notice, this list
//      of conditions and the following disclaimer in the documentation and/or other materials
//      provided with the distribution.
//
//THIS SOFTWARE IS PROVIDED BY Will Stott ``AS IS'' AND ANY EXPRESS OR IMPLIED
//WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Will Stott OR
//CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
//CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
//SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
//ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
//NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
//ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//The views and conclusions contained in the software and documentation are those of the
//authors and should not be interpreted as representing official policies, either expressed
//or implied, of Will Stott.
//
//----Authors--------------------------------------------------------------------------------------
//created by: will.stott@ucl.ac.uk Feb 2011
//
//----Comments-------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------

#include "ResourceList.h"
#include "ImageObjectType.h"
#include "PtShapeType.h"
#include "EllipseShapeType.h"


ResourceList::ResourceList(void)
{
}


ResourceList::~ResourceList(void)
{
	size_t cnt = _ResourceList.size();
	if (cnt > 0 )
	{
		for (size_t x = 0; x < cnt; x++)
			delete  _ResourceList[x];
		_ResourceList.clear();
	}
}

bool ResourceList::Add(const char * ImageObjectTypeName, int MinResourceId, int MaxResourceId)
{
	bool rc = false;

	ResourceInfo *pResourceInfo = new ResourceInfo();
	pResourceInfo->_ImageObjectTypeName = ImageObjectTypeName;
	pResourceInfo->_MinResourceId = MinResourceId;
	pResourceInfo->_MaxResourceId = MaxResourceId;
	pResourceInfo->_ImageObjectTypesCreated = 0;

	_ResourceList.push_back(pResourceInfo);
	rc = true;

	return rc;
}


int	 ResourceList::GetNewResourceId(const char * imageObjectTypeName)
{
	int rc = -1;

	int index = FindIndex(imageObjectTypeName);
	if (index != -1 )
	{
		int maxCreate = _ResourceList[index]->_MaxResourceId - _ResourceList[index]->_MinResourceId + 1;
		if ( _ResourceList[index]->_ImageObjectTypesCreated < maxCreate )
		{
			rc = _ResourceList[index]->_MinResourceId + _ResourceList[index]->_ImageObjectTypesCreated;
			_ResourceList[index]->_ImageObjectTypesCreated++;
		}

	}
	return rc;
}

int  ResourceList::GetResourceIdRangeMin(const char * imageObjectTypeName)
{
	int rc = -1;

	int index = FindIndex(imageObjectTypeName);
	if (index != -1 )
		rc = _ResourceList[index]->_MinResourceId;

	return rc;
}

int  ResourceList::GetResourceIdRangeMax(const char * imageObjectTypeName)
{
	int rc = -1;

	int index = FindIndex(imageObjectTypeName);
	if (index != -1 )
		rc = _ResourceList[index]->_MaxResourceId;

	return rc;
}

int	 ResourceList::GetImageObjectTypesCreated(const char * ImageObjectTypeName)
{
	int rc = -1;

	int index = FindIndex(ImageObjectTypeName);
	if (index != -1 )
		rc = _ResourceList[index]->_ImageObjectTypesCreated;

	return rc;
}

bool ResourceList::IsFound(int Id)
{
	bool rc = false;

	size_t cnt = _ResourceList.size();
	for (size_t x = 0; x < cnt; x++)
	{
		if ( (Id >= _ResourceList[x]->_MinResourceId) && (Id <= _ResourceList[x]->_MaxResourceId)) 
		{
			rc = true;
			break;
		}
	}
	return rc;
}

//-------------------------------------------------------------------------------------------------
//			Private member functions
//-------------------------------------------------------------------------------------------------

int	 ResourceList::FindIndex(const char * imageObjectTypeName)
{
	int rc = -1;

	if (imageObjectTypeName != '\0')
	{
		size_t cnt = _ResourceList.size();
		for (size_t x = 0; x < cnt; x++)
		{
			if ( _ResourceList[x]->_ImageObjectTypeName == imageObjectTypeName) 
			{
				rc = x;
				break;
			}
		}
	}
	return rc;
}

//-------------------------------------------------------------------------------------------------
//			E N D   O F   F I L E
//-------------------------------------------------------------------------------------------------

